
const nodeMailer = require('nodemailer');
const baseConfig = require('../config/base');

module.exports = () => {

    //创建一个传输方式
    let transporter = nodeMailer.createTransport({
        host:baseConfig.mailer.host,//这是你使用第三方应用发送的主机名，QQ邮箱默认是 "smtp.qq.com"
        port: 465, //端口号， 
        secure: true,
        auth: {
            user:baseConfig.mailer.email, //发送方的邮箱
            pass:baseConfig.mailer.pass //你的授权码或者密码
        },
        tls: {
            rejectUnauthorized: false,
            minVersion: "TLSv1.2"
        }
    });

    /**
     * 发送邮件
     * @param {String} to 接收人 多个逗号分隔
     * @param {String} html 主题内容
     * @param {String} subject 主标题
     */
    function sendMail(to, html,subject,sender = baseConfig.mailer.sender) {
        return new Promise(function (resolve, reject) {
            let mailOptions = {
                from:`"${sender}" <${baseConfig.mailer.email}>`, //发送者名称 和 邮箱地址  
                to, //发给谁，填写邮箱
                subject,//主标题
                html//html 邮件信息主体，这里面应该把你想发的信息包含在这里，比如验证码！
            };

            let isMore = to.match(/[^,]+/g);
            if(isMore.length>1){
                mailOptions.to = isMore[0];//取第一个
                mailOptions.bcc = isMore.slice(1).join(',');
            }

            //发送邮件，调用sendMail方法发送邮件
            transporter.sendMail(mailOptions, (error, info) => { //第一个参数是你写的邮箱内容，一个对象，第二个参数是回调函数
                if (error) { //回调函数的第一个参数是错误信息，第二个参数没用过，具体可以查看官网
                    ylog.warn(`Email: "${sender}" <${baseConfig.mailer.email}> to ${to} Error: ${error}`);
                    resolve({ status: false, msg: '发送失败:' + error });
                } else {
                    //发送成功后你的操作
                    ylog.info(`Email: "${sender}" <${baseConfig.mailer.email}> to ${to} send successfully!`);
                    resolve({ status: true, msg: '发送成功' });
                }
            });
        });
    }


    return async (ctx, next) => {
        ctx.sendMail = sendMail;//挂载
        global.sendMail = sendMail;//挂载
        await next();
    };
};